// 注释: 这里原本计划导入一个名为'store'的模块，但被注释掉了，可能是因为找到了更好的处理方式或暂时不需要
import JSEncrypt from 'jsencrypt' // 引入jsencrypt库
import { getPublicKey, setPublicKey } from '@/utils/publicKey' // 从本地存储中获取公钥
import { getPublicKey as getUserPublicKey } from '@/api/user' // 从用户API获取公钥  从'@/api/user'中导入getPublicKey函数，并重命名为getUserPublicKey，用于获取用户公钥

/**
 * 对给定的值进行加密
 * 该函数首先尝试从本地获取公钥，如果本地没有公钥，则通过API获取，并存储到本地
 * @param {string} value - 需要加密的字符串
 * 返回Promise，解析为加密后的字符串，如果加密失败则返回undefined
 */
export default async function encrypt(value) {
  let key = getPublicKey() // 尝试从本地获取公钥
  try {
    // 如果本地没有公钥或公钥为"undefined"字符串，则通过API获取公钥
    if (!key || key === 'undefined') {
      const result = await getUserPublicKey() // 通过API获取公钥
      key = result.data.pubKey // 获取公钥
      key = key.replace(/\. +/g, '') // 移除公钥中的多余空格
      key = key.replace(/[\r\n]/g, '') // 移除公钥中的换行符和回车符
      setPublicKey(key) // 将获取到的公钥存储到本地
    }
    const encrypt = new JSEncrypt() // 创建一个新的加密函数JSEncrypt实例
    encrypt.setPublicKey(key) // 为加密函数设置公钥
    return encrypt.encrypt(value) // 返回加密后的值
  } catch (err) {
    console.log(err) // 如果发生错误，打印错误信息
  }
}
